package com.example.service.impl;

import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.common.ResultCode;
import com.example.dao.*;
import com.example.entity.Xuesheng;
import com.example.exception.CustomException;
import com.example.service.XueshengService;
import com.example.vo.XueshengVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Map;

@Service("xueshengService")
public class XueshengServiceImpl extends ServiceImpl<XueshengDao, Xuesheng> implements XueshengService {

    @Resource
    private XueshengDao xueshengDao;

    public Xuesheng add(Xuesheng xuesheng) {
		if(xuesheng.getMima()==null) {xuesheng.setMima(SecureUtil.md5("001"));}else {xuesheng.setMima(SecureUtil.md5(xuesheng.getMima())); }
	    LambdaQueryWrapper<Xuesheng> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(Xuesheng::getXuehao,xuesheng.getXuehao());
        Xuesheng findXuesheng = xueshengDao.selectOne(wrapper);
        if (findXuesheng != null) {
            throw new CustomException("1001", "" + xuesheng.getXuehao() + "\"已存在");
        }
        xuesheng.setAddtime(new Date());
        xueshengDao.insert(xuesheng);
        return xuesheng;
    }
	
	@Override    public List<Map<String,Object>> xuesheng_tj_yuanxi() {    List<Map<String,Object>> returnMap = xueshengDao.xuesheng_tj_yuanxi();    return returnMap;    }    @Override    public List<Map<String,Object>> xuesheng_tj_banji() {    List<Map<String,Object>> returnMap = xueshengDao.xuesheng_tj_banji();    return returnMap;    }    
	
    public void delete(Long id) {
        xueshengDao.deleteById(id);
    }
	

    public void update(Xuesheng xuesheng) {
         LambdaQueryWrapper<Xuesheng> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(Xuesheng::getXuehao,xuesheng.getXuehao());
        Xuesheng findXuesheng = xueshengDao.selectOne(wrapper);
		if (findXuesheng != null && xuesheng.getId() != findXuesheng.getId()) {
            throw new CustomException("1001", "" + xuesheng.getXuehao() + "\"已存在");
        }
        xueshengDao.updateById(xuesheng);
    }
	
	@Override
    public List<Map<String, Object>> daochuexcel() {
        return xueshengDao.daochuexcel();
    }

    @Override
    public Xuesheng findById(Integer id) {
        return xueshengDao.selectById(id);
    }

    public XueshengVo findPage(XueshengVo xueshengVo) {
        LambdaQueryWrapper<Xuesheng> wrapper = Wrappers.lambdaQuery();
		wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getXuehao()), Xuesheng::getXuehao,xueshengVo.getXuehao());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getMima()), Xuesheng::getMima,xueshengVo.getMima());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getXingming()), Xuesheng::getXingming,xueshengVo.getXingming());        wrapper.eq(ObjectUtils.isNotEmpty(xueshengVo.getXingbie()), Xuesheng::getXingbie,xueshengVo.getXingbie());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getShenfenzheng()), Xuesheng::getShenfenzheng,xueshengVo.getShenfenzheng());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getDianhua()), Xuesheng::getDianhua,xueshengVo.getDianhua());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getYuanxi()), Xuesheng::getYuanxi,xueshengVo.getYuanxi());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getBanji()), Xuesheng::getBanji,xueshengVo.getBanji());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getJiguan()), Xuesheng::getJiguan,xueshengVo.getJiguan());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getZhaopian()), Xuesheng::getZhaopian,xueshengVo.getZhaopian());        wrapper.like(ObjectUtils.isNotEmpty(xueshengVo.getBeizhu()), Xuesheng::getBeizhu,xueshengVo.getBeizhu());        
        Page<Xuesheng> page = new Page<>(xueshengVo.getCurrent(),xueshengVo.getCurrentNum());
        xueshengDao.selectPage(page,wrapper);
        List<Xuesheng> xueshengs = page.getRecords();
        xueshengVo.setList(xueshengs);
        xueshengVo.setPages(page.getPages());
        xueshengVo.setTotal(page.getTotal());
        xueshengVo.setCurrent(page.getCurrent());
        xueshengVo.setCurrentNum(page.getSize());
        return xueshengVo;
    }

    @Override
    public void deleteList(List<Xuesheng> list) {
        List<Integer> ids =  list.stream().map(Xuesheng::getId).collect(Collectors.toList());
        xueshengDao.deleteBatchIds(ids);
    }
	
	@Override
    public Xuesheng login(Xuesheng xuesheng) {
        LambdaQueryWrapper<Xuesheng> wrapper = new LambdaQueryWrapper();
        wrapper.eq(ObjectUtils.isNotEmpty(xuesheng.getXuehao()), Xuesheng::getXuehao,xuesheng.getXuehao());
        Xuesheng xueshengInfo = xueshengDao.selectOne(wrapper);
        if (xueshengInfo == null) {
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        if (!SecureUtil.md5(xuesheng.getMima()).equalsIgnoreCase(xueshengInfo.getMima())) {
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        return xueshengInfo;
    }
	
	 @Override
    public void findxueshengxuehao(Xuesheng xuesheng) {
        LambdaQueryWrapper<Xuesheng> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(Xuesheng::getXuehao,xuesheng.getXuehao());
        Xuesheng findXuesheng = xueshengDao.selectOne(wrapper);
        if (findXuesheng != null) {
            throw new CustomException("1001", "" + xuesheng.getXuehao() + "\"已存在");
        }
    }
	
	//youxxianxci
}
